package cn.trigram.feign;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@Component
@FeignClient(name = "nacos-service02")
//这个是feign的单独client配置
/*@FeignClient(name = "nacos-service02", fallback = EchoServiceFallback.class,
             configuration = EchoServiceConfiguration.class)*/
public interface EchoService {

  @GetMapping(value = "/echo/{str}")
  String echo(
      @PathVariable("str")
          String str
  );

  @GetMapping(value = "/error-echo/{str}")
  String errorEcho(
      @PathVariable("str")
          String str
  );

}

/**
 * 不写在springboot 启动类的子目录下，是因为这个配置类由ribbon 的自动配置类加载到ribbon client 的上下文中 父上下文则是springboot启动的上下文
 * <p>
 * 这里的<code>@Configuration</code>可以不加放在启动类的子目录下
 * <p>
 * 这里只是演示可以使用代码配置，但是应该优先使用配置文件
 *
 * @author 一日看尽长安花
 * @date 2022/02/18 11:05:39
 */
class EchoServiceConfiguration {

  @Bean
  public EchoServiceFallback echoServiceFallback() {

    return new EchoServiceFallback();
  }

}

class EchoServiceFallback implements EchoService {

  @Override
  public String echo(
      @PathVariable("str")
          String str
  ) {

    return "feign 调用echo 方法的失败回滚";
  }

  @Override
  public String errorEcho(String str) {

    return "feign 调用error echo 方法的失败回滚";
  }

}